/* call做了什么:
● 将函数设为对象的属性
● 执行和删除这个函数
● 指定this到函数并传入给定参数执行函数
● 如果不传入参数，默认指向 window */

function fn(a, b) {
  console.log("fn的this", this);
  return a + b;
}
const p = {
  name: "张三",
  fun: fn,
};
// p.fun(1,2)
// fn.call("aa",1,2);
Function.prototype.myCall = function(ctx,...args) {
    ctx = (ctx === null || ctx === undefined) ? globalThis : Object(ctx);
    const key = Symbol("temp");
    Object.defineProperty(ctx,key,{
       enumerable: false, // 不可枚举的
       value: this

    })
    ctx[key] = this;
    const result =  ctx[key](...args)
    delete ctx[key]
    return result
}
fn.myCall("str", 1, 2);
